import axios from 'axios';
import { Message, Loading } from 'element-ui';

if (process.env.MOCK) {// 环境配置，一般用于开发初期，反正线上版本肯定不用
  require('./mock.js')
}// 本地开发，引入MOCK的拦截规则，用于开发早期自编


const { config } = require('@/../config/axios_config.js');
// import config from './config.js';
// require/import 目前看来两者皆可

axios.defaults.timeout = 1000 * 10;
axios.defaults.baseURL = `${config.host}:${config.prot}`;
axios.defaults.headers.post['Content-Type'] = 'Content-Type:application/x-www-form-urlencoded; charset=UTF-8';//预防跨域

// 如果使用全局loading
// let loading;
// function openLoading() {loading = Loading.service({lock: true,background: 'rgba(255,255,255,0.6)'});}
// function closeLoading() {loading.close()}
// 不过实际业务不怎么待见全局loading（无论它们知道与否）

// 添加请求拦截器
axios.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么
    // 如果使用全局loading，可以在这里open，不过……
    return config;
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
  // 如果使用全局loading，可以在这里close，不过……
  // 对响应数据做点什么
  if (response.status === 200) {
    return response.data;//对明确的200做脱壳处理
  }
  // http://www.axios-js.com/zh-cn/docs/#%E5%93%8D%E5%BA%94%E7%BB%93%E6%9E%84 官网的响应结构
  return response;
}, function (error) {
  console.log(error)
  // 对响应错误做点什么
  if (error && error.response) {
    switch (error.response.status) {
      case 400: error.message = '请求错误(400)'; break;
      case 401: this.$router.push('/login'); break;
      case 403: error.message = '拒绝访问(403)'; break;
      case 404: error.message = '请求出错(404)'; break;
      case 408: error.message = '请求超时(408)'; break;
      case 500: error.message = '服务器错误(500)'; break;
      case 501: error.message = '服务未实现(501)'; break;
      case 502: error.message = '网络错误(502)'; break;
      case 503: error.message = '服务不可用(503)'; break;
      case 504: error.message = '网络超时(504)'; break;
      case 505: error.message = 'HTTP版本不受支持(505)'; break;
      default: error.message = `连接出错(${error.response.status})!`;
    }
  } else {
    error.message = '连接服务器失败!'
  }
  return Promise.reject(error);
});

let api = {
  testGet: function (data) {
    data = data || { a: 1, b: 2 }
    return axios.get('/test', {
      params: data,
    });
  },
  testPost: function (data) {
    data = data || { a: 1, b: 2 }
    return axios.post('/testPost', {
      data: data,
    });
  },
  testMirrorForce: function (params, data) {
    //
    return axios.post(`/test/MirrorForce`, data, {
      params: params
    });
  },
  testMock:function(){
    return axios.post('/testMock')
  }
  //后面跟正式的api接口
};

export { axios, api };